{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 抓取微博发言\n",
    "\n",
    "- 作者：DGC'Idea\n",
    "- 版本：V0.3   \n",
    "- 更新日期：2018年4月9日\n",
    "\n",
    "----------\n",
    "\n",
    "- 研究目的：获取关注微博博主的发言；\n",
    "- 研究方法：从微博手机主页爬取所有发言。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": "数据引擎：运行于研究\n 已准备好...\n"
    }
   ],
   "source": [
    "#-*- coding: utf-8 -*-\n",
    "\n",
    "# 基本\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "# 系统\n",
    "import os\n",
    "\n",
    "# 网络\n",
    "import urllib.request\n",
    "import requests\n",
    "import json\n",
    "import re\n",
    "\n",
    "# 日期、时间\n",
    "import time\n",
    "from datetime import timedelta,date,datetime\n",
    "\n",
    "# 网页解析\n",
    "from bs4 import BeautifulSoup\n",
    "\n",
    "# 自定义\n",
    "import sys\n",
    "sys.path.append('../DM')\n",
    "sys.path.append('../TL')\n",
    "\n",
    "from dm import *\n",
    "from tl import exists_file\n",
    "\n",
    "\n",
    "# 数据目录\n",
    "_data_path='../Data/'\n",
    "# 数据引擎\n",
    "_data=Csv(_data_path)\n",
    "\n",
    "\n",
    "#设置代理IP\n",
    "proxy_addr=\"122.241.72.191:808\"\n",
    "\n",
    "#性别\n",
    "Gender={'m':'男','w':'女'}\n",
    "\n",
    "#性别\n",
    "Accreditation={'True':'是','False':'否'}\n",
    "\n",
    "#使用代理访问页面\n",
    "def use_proxy(url,proxy_addr):\n",
    "    req=urllib.request.Request(url)\n",
    "    req.add_header(\"User-Agent\",\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36\\\n",
    "                   (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0\")\n",
    "    proxy=urllib.request.ProxyHandler({'http':proxy_addr})\n",
    "    opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)\n",
    "    urllib.request.install_opener(opener)\n",
    "    data=urllib.request.urlopen(req).read().decode('utf-8','ignore')\n",
    "    return data\n",
    "\n",
    "\n",
    "\n",
    "#获取微博账号的用户基本信息，如：微博昵称、微博地址、微博头像、关注人数、粉丝数、性别、等级等\n",
    "def get_weibo_userInfo(id):\n",
    "    #url地址\n",
    "    url='https://m.weibo.cn/api/container/getIndex?type=uid&value='+id\n",
    "    #使用代理访问页面\n",
    "    data=use_proxy(url,proxy_addr)\n",
    "    #解析数据\n",
    "    content=json.loads(data).get('data')\n",
    "    #头像地址\n",
    "    image_url=content.get('userInfo').get('profile_image_url')\n",
    "    #说明\n",
    "    description=content.get('userInfo').get('description')\n",
    "    #主页地址\n",
    "    profile_url=content.get('userInfo').get('profile_url')\n",
    "    #是否认证\n",
    "    verified=content.get('userInfo').get('verified')\n",
    "    #关注数\n",
    "    follow_count=content.get('userInfo').get('follow_count')\n",
    "    #昵称\n",
    "    name=content.get('userInfo').get('screen_name')\n",
    "    #粉丝数\n",
    "    followers_count=content.get('userInfo').get('followers_count')\n",
    "    #性别\n",
    "    gender=content.get('userInfo').get('gender')\n",
    "    #等级\n",
    "    urank=content.get('userInfo').get('urank')\n",
    "    statuses_count=content.get('userInfo').get('statuses_count')\n",
    "    #显示信息\n",
    "    return(\n",
    "          name,\n",
    "          Gender[gender],\n",
    "          profile_url,\n",
    "          Accreditation[str(verified)],\n",
    "          urank, \n",
    "          follow_count,\n",
    "          followers_count,\n",
    "          statuses_count,\n",
    "          description,    \n",
    "         )\n",
    "\n",
    "\n",
    "#获取微博主页的containerid，爬取微博内容时需要此id\n",
    "def get_containerid(url):\n",
    "#     data=use_proxy(url,proxy_addr)\n",
    "    #直接请求模式\n",
    "    data=requests.get(url).text \n",
    "    content=json.loads(data).get('data')\n",
    "    for data in content.get('tabsInfo').get('tabs'):\n",
    "        if(data.get('tab_type')=='weibo'):\n",
    "            containerid=data.get('containerid')\n",
    "    return containerid\n",
    "\n",
    "\n",
    "#获取微博的更进一步信息：确切时间、完整正文\n",
    "def get_weibo_text(url):\n",
    "    #代理模式\n",
    "#     data=use_proxy(url,proxy_addr)\n",
    "    #直接请求模式\n",
    "    data=requests.get(url).text \n",
    "    #剥离不相关信息\n",
    "    data=data.split('var $render_data = [')[1].split('][0] ')[0]\n",
    "    #取得json信息\n",
    "    content=json.loads(data).get('status')\n",
    "    #微博正文\n",
    "    text=content['text']\n",
    "    #完整时间\n",
    "    created_at=content['created_at']\n",
    "    #转换时间格式（原格式比较特别）\n",
    "    created_at=str(datetime.strptime(created_at.replace('+0800',''),'%a %b %d %H:%M:%S %Y'))    \n",
    "    #返回正文和时间\n",
    "    return text,created_at\n",
    "    \n",
    "    \n",
    "#获取微博内容：正文、详情页地址、点赞数、评论数、转发数等\n",
    "def get_weibo_data(user_id,start_date=None,First=False):\n",
    "    #页数计数器\n",
    "    page=0\n",
    "    #微博计数器\n",
    "    count=0\n",
    "    #数据表\n",
    "    data_list=[]\n",
    "    #微博名\n",
    "    name=id_all_list[user_id]\n",
    "    #退出标记\n",
    "    loop=True\n",
    "    #url（微博用户信息网址）\n",
    "    url='https://m.weibo.cn/api/container/getIndex?type=uid&value='+user_id\n",
    "    #获得完整id\n",
    "    containerid=get_containerid(url)\n",
    "    #页面循环\n",
    "    while loop:\n",
    "        #开启错误抓取\n",
    "        try:\n",
    "            # 页面数累计            \n",
    "            page+=1    \n",
    "            weibo_url='https://m.weibo.cn/api/container/getIndex?type=uid&value='\\\n",
    "                       +user_id+'&containerid='+containerid+'&page='+str(page)\n",
    "  \n",
    "            # 代理模式\n",
    "#             data=use_proxy(weibo_url,proxy_addr) \n",
    "            #直接请求模式\n",
    "            data=requests.get(weibo_url).text \n",
    "            # 取得josn数据\n",
    "            content=json.loads(data).get('data')\n",
    "            # 取得微博信息\n",
    "            cards=content.get('cards')\n",
    "            \n",
    "            # 判断是否为空数据\n",
    "            if(len(cards)==0):\n",
    "                #退出循环\n",
    "                break   \n",
    "                \n",
    "            #遍历当前页面所有微博  \n",
    "            for card in cards:\n",
    "                card_type=card.get('card_type')\n",
    "                \n",
    "                # 非微博发言\n",
    "                if(card_type!=9):\n",
    "                    continue\n",
    "                    \n",
    "                # 微博内容    \n",
    "                mblog=card.get('mblog')\n",
    "                \n",
    "                #去除置顶微博\n",
    "                if len(mblog.get('edit_at',''))!=0 :\n",
    "                    continue\n",
    "                    \n",
    "                #微博实际网址    \n",
    "                scheme=card.get('scheme')  \n",
    "                #微博实际正文、发布时间    \n",
    "                text,created_at=get_weibo_text(scheme)\n",
    "                \n",
    "                if created_at<=start_date:\n",
    "                    loop=False\n",
    "                    break\n",
    "                    \n",
    "                #微博数累计 \n",
    "                count+=1\n",
    "                print(\"\\r\"+\"正在获取：%s %s 的微博，已获取 %s 条\"%(name, created_at, count),end=\"\")\n",
    "                #添加到数据列表\n",
    "                data_list.append([created_at,text,\n",
    "                                mblog.get('attitudes_count'),mblog.get('comments_count'),mblog.get('reposts_count'),\n",
    "                                scheme,False,\n",
    "                                ])\n",
    "            #延时\n",
    "            time.sleep(1.0)\n",
    "        #错误处理\n",
    "        except Exception as e:\n",
    "            print('错误：%s'%(e),end='\\r')\n",
    "            if '418' in str(e):\n",
    "                #遇到418错误\n",
    "                time.sleep(3.0)\n",
    "                pass\n",
    "            else:   \n",
    "                #其它错误，延时后继续\n",
    "                time.sleep(1.0)\n",
    "                pass   \n",
    "            \n",
    "    if len(data_list)!=0:\n",
    "        #数据表整理                \n",
    "        columns_list=['created_at','text','attitudes_count','comments_count','reposts_count','scheme','sended']\n",
    "        df=pd.DataFrame(data=data_list,columns=columns_list) \n",
    "        #返回数据\n",
    "        return df\n",
    "    else:\n",
    "        return None\n",
    "    \n",
    "#增量更新\n",
    "def update_weibo_data(id_list): \n",
    "    #遍历所有id\n",
    "    for user_id in id_list:\n",
    "        #微博名\n",
    "        name=id_all_list[user_id] \n",
    "        df=pd.DataFrame()\n",
    "\n",
    "        #判断文件是否存存在\n",
    "        if exists_weibo_file(user_id):    #+'test'        \n",
    "            #增量更新         \n",
    "            #从cvs文件中导入数据\n",
    "            df=read_weibo_data(user_id)\n",
    " \n",
    "            #获得增量开始日期\n",
    "            update_date=df['created_at'].iloc[0]  \n",
    "        else:\n",
    "            #初次计算\n",
    "            update_date=None\n",
    "            \n",
    "        # 获取数据    \n",
    "        update_df=get_weibo_data(user_id,update_date) \n",
    "        \n",
    "        # 判断是否获取到数据\n",
    "        if not update_df is None:\n",
    "            print('共计更新：%s %s 条微博'%(name,len(update_df)))\n",
    "            #拼接新旧数据，并重置索引\n",
    "            df=pd.concat([update_df,df],ignore_index=True) \n",
    "            #return update_df\n",
    "            #保存数据到cvs \n",
    "            save_weibo_data(user_id,df)\n",
    "        \n",
    "#检测文件      \n",
    "def exists_weibo_file(user_id,data_root=_data_path):\n",
    "    #cvs文件名\n",
    "    data_file='%s%s.csv'%(data_root,'msg_weibo_'+user_id)\n",
    "    return exists_file(data_file)\n",
    "\n",
    "\n",
    "#读取数据        \n",
    "def read_weibo_data(user_id):\n",
    "    #文件名\n",
    "    data_file='msg_weibo_'+user_id\n",
    "    #从cvs文件恢复数据\n",
    "    df=_data.read(data_file)\n",
    "    \n",
    "    return df\n",
    "\n",
    "#保存数据        \n",
    "def save_weibo_data(user_id,df):\n",
    "    #文件名\n",
    "    data_file='msg_weibo_'+user_id\n",
    "    #保存到cvs文件\n",
    "    _data.save(data_file,df,append=False)\n",
    "    \n",
    "\n",
    "#id列表\n",
    "id_all_list={\n",
    "    '5687069307':'ETF拯救世界',\n",
    "#     '1669616825':'程老湿爱吐槽',\n",
    "#     '1254381361':'闲来一坐'\n",
    "        }\n",
    "\n",
    "print(' 已准备好...')   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.更新数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": "正在获取：ETF拯救世界 2019-07-26 15:59:53 的微博，已获取 580 条共计更新：ETF拯救世界 580 条微博\n"
    }
   ],
   "source": [
    "#更新数据\n",
    "df=update_weibo_data(id_all_list)\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.设置当前ID"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": "微博昵称：ETF拯救世界\n 性　　别：男\n 主页地址：https://m.weibo.cn/u/5687069307?uid=5687069307&luicode=10000011&lfid=1005055687069307\n 是否认证：是\n 等　　级：40\n 关注人数：313\n 粉 丝 数：317153\n 微 博 数：7739\n 说　　明：\n\n"
    }
   ],
   "source": [
    "#获取当前微博ID信息\n",
    "# get_weibo_userInfo(id_all_list.keys().tolist()[1])\n",
    "user_id='5687069307'\n",
    "(user_name,\n",
    "gender,\n",
    "profile_url,\n",
    "verified,\n",
    "urank, \n",
    "follow_count,\n",
    "followers_count,\n",
    "statuses_count,\n",
    "description)=get_weibo_userInfo(user_id)\n",
    "print(\n",
    "      \" 微博昵称：\"+user_name+\"\\n\"+\n",
    "      \" 性　　别：\"+gender+\"\\n\"+\n",
    "      \" 主页地址：\"+profile_url+\"\\n\"+\n",
    "      \" 是否认证：\"+verified+\"\\n\"+\n",
    "      \" 等　　级：\"+str(urank)+\"\\n\"+  \n",
    "      \" 关注人数：\"+str(follow_count)+\"\\n\"+\n",
    "      \" 粉 丝 数：\"+str(followers_count)+\"\\n\"+\n",
    "      \" 微 博 数：\"+str(statuses_count)+\"\\n\"+\n",
    "      \" 说　　明：\"+description+\"\\n\"       \n",
    "     )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.查看最近发言\n",
    "- 查看今天、昨天、本月发言；\n",
    "- 去除了发言中的连接等无关信息；"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.今天的发言"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": "2020-01-31\n转发微博\n\n"
    }
   ],
   "source": [
    "from bs4 import BeautifulSoup\n",
    "\n",
    "\n",
    "#查看最新发言      \n",
    "def show_weibo_text(user_id,day='今天',url=False,data_root='./'):       \n",
    "    #从cvs文件恢复数据\n",
    "    df=read_weibo_data(user_id)\n",
    "    df['time']=df['created_at']\n",
    "    df['created_at']=df['created_at'].astype('str').str[0:10]\n",
    "    if day=='今天' :\n",
    "        day=pd.datetime.today().strftime('%Y-%m-%d')\n",
    "        df=df[df['created_at']==day]\n",
    "    elif day=='昨天':\n",
    "        day='昨天'\n",
    "        day=(pd.datetime.today()-timedelta(1)).strftime('%Y-%m-%d')        \n",
    "        df=df[df['created_at']==day]\n",
    "    elif day=='本月' :\n",
    "        day=pd.datetime.today().strftime('%Y-%m')+'-01'   \n",
    "        df=df[df['created_at']>=day]\n",
    "    elif day=='上半年' :\n",
    "        day_start=pd.datetime.today().strftime('%Y')+'-01-01'   \n",
    "        day_end=pd.datetime.today().strftime('%Y')+'-06-30' \n",
    "        df=df[(df['created_at']>=day_start) & (df['created_at']<=day_end)]\n",
    "    elif day=='下半年' :\n",
    "        day_start=pd.datetime.today().strftime('%Y')+'-07-01'   \n",
    "        day_end=pd.datetime.today().strftime('%Y')+'-12-31' \n",
    "        df=df[(df['created_at']>=day_start) & (df['created_at']<=day_end)]    \n",
    "    else:\n",
    "        return\n",
    "    df=df.sort_values(['created_at'],ascending=True)\n",
    "    if len(df)==0:\n",
    "        print('无内容...')\n",
    "        return\n",
    "    for i in range(len(df)): \n",
    "        text=df['text'].iloc[i]\n",
    "        print(df['created_at'].iloc[i]) \n",
    "        soup=BeautifulSoup(text,'html.parser')\n",
    "        print (''.join([item for item in soup.stripped_strings]))\n",
    "        if url:\n",
    "            print(str(df['scheme'].iloc[i]))\n",
    "        print(\"\\r\")  \n",
    "\n",
    "show_weibo_text(user_id,\"今天\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2.昨天的发言"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": "无内容...\n"
    }
   ],
   "source": [
    "show_weibo_text(user_id,\"昨天\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3.本月的发言"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": "2020-01-01\n新年快乐！！！\n\n2020-01-01\n新的一年，早上起来第一件事是锻炼身体这一年，要更加善待自己和他人，要更努力的做事。\n\n2020-01-01\n北京5G速度实测\n\n2020-01-02\n说一个几周前你会觉得很可笑的事：传媒ETF居然溢价了。市场的羊群疯起来真是不看路的。\n\n2020-01-02\n挣点钱而已，意思不大。\n\n2020-01-02\n今年是大波动这个判断是不是越来越靠谱了。如果全年大涨，就是又一个短命行情，明年又是万人坑。只有大幅波动才符合长牛慢牛的要求。\n\n2020-01-02\n今天押涨有风险吗\n\n2020-01-02\n听进去了没有。现在明白了吧。我说的一定要注意啊。\n\n2020-01-02\n3000点，账户历史新高了吧。\n\n2020-01-02\n春节前如果能维持涨势，春节后又要冲一把。\n\n2020-01-03\n喷了。好消息不断。\n\n2020-01-06\n黄金原油500传媒环保这些辣鸡这么涨让人感到有点不好意思了。\n\n2020-01-06\n500上面第一个压力5650\n\n2020-01-06\n意思不大\n\n2020-01-06\n投资的时候，舒服重要不重要。谁舒服谁发言。\n\n2020-01-06\n再次推荐电影《迷雾》The Mist没看过的一定要看看。看到最后。每次最绝望，最坚持不下去的时候，想想这部电影，会有用。\n\n2020-01-07\n早点睡，晚安\n\n2020-01-07\n以下几位拿礼物的朋友还没联系我或者小助理，请给我发私信。春节前再不联系就算自动放弃了。ETF张来迟、不忘初心方得始终201820232028、trq81526、丹石_bj\n\n2020-01-07\n出门在外，尽量别跟人起冲突。因为你根本想象不到对方有多二。\n\n2020-01-07\n传媒上面的压力位在1630。\n\n2020-01-07\n传媒辣鸡。你给我赚那么多也是辣鸡。\n\n2020-01-07\n你的东西涨了，你心里要清楚是因为价值还是炒作。自己心里得明明白白的。\n\n2020-01-07\n回复@兔望雨停:赔了踏踏实实拿10年，赚了烫手拿不了3天。非常经典，绝大多数人都这样。//@兔望雨停:我感觉账户的收益让我觉得好不踏实 只有每天上班的工资让我觉得踏实，明明这几天的收益抵我几个月工资。不知道是怎么回事\n\n2020-01-07\n回复@姨夫劝你莫拒绝:拿回现金也不是真的。没准下一把就赔了。销户离场之前都是假的。//@姨夫劝你莫拒绝:账面上的是虚的，收菜拿回现金的时候才是真的\n\n2020-01-07\n回复@frederick_999:永远不要劝别人炒股或者不炒股，买基金或者不买基金，投资或者不投资。一个建议，99%对。//@frederick_999:我几个券商的朋友已经开始拉着身边小伙伴入伙准备在股市大挣一笔了，我劝了一晚上没劝住。\n\n2020-01-07\n去年春节，吃饭的时候你跟亲戚说，钻石坑，买股票赚大钱。他们笑话你遇到了骗子。今年春节，吃饭的时候亲戚跟你说，黄金十年，买股票赚大钱。你笑着咬了口韭菜馅饺子。\n\n2020-01-07\n回复@1个吼猴:有些人炒股就是图个乐，跟打麻将似的。不炒股玩别的更闹心，孩子踏踏实实的。//@1个吼猴:回复@1个吼猴:但我爹不一样。我爹不相信市场，也不跟风追高，只相信自己天纵奇才。结果赔的比我妈还多\n\n2020-01-07\n又是一个好日子。今天资产能继续新高吗。\n\n2020-01-08\n回复@江尼的小酒馆:WTF，场内挂单要赶紧安排上了。送钱啊这是。//@江尼的小酒馆:E大今天德国30不知道出了什么幺蛾子，我的场内网格提醒买入，应该是突然暴跌，乌龙指？\n\n2020-01-08\n白银出掉一网，原油场内溢价卖出套利。现在金油大跌，这么给面子吗。\n\n2020-01-08\n虽然挣钱意思不大，但是跟赔钱时候一点意思都没有比起来，还是有意思多了啊。\n\n2020-01-08\n所以每次去拜大佬的时候，我第一个都是许愿国泰民安。这四个字没了，什么都是空。\n\n2020-01-08\n再走一个\n\n2020-01-08\n160416 计划里的石油基金，场内部分可以先卖出，大幅溢价。\n\n2020-01-08\n截至目前，150的31个品种中，盈利的是28个。如果把500算做一个大类，则浮亏品种只剩环保和油气。环保6%，油气2%。s计划18个品种中，盈利17个。只剩油气浮亏2%。如果做了网格，这两个也基本赚钱了。你的账户现在应该是满堂红。其实金融投资只要理性，赚钱真的不难。赔钱很难。无论A股港股海外互联黄金原油德国债券，都是如此。\n\n2020-01-09\n不用谢评论配图\n\n2020-01-09\n这个市场上充满了疯子和傻子。他们不会消失，所以理性的人赚钱就是必然//@ETF拯救世界:不用谢评论配图\n\n2020-01-09\n回复@ETF拯救世界:喷了。跌停接回的朋友们，如果疯子们拉回-5%左右，可以再次卖掉，再吃5%。一天利润超过15%你什么感觉。T+0，当天买卖ok//@ETF拯救世界:回复@ETF虚一而静:可以。也可以再等等，目前还有点溢价，不过无所谓了，十几个点差价已经吃到了\n\n2020-01-09\n回复@最爱芝麻糖:QDII基金绝大多数都可以。包括标普500，DAX，恒生等等。//@最爱芝麻糖:新手想问下  这个石油基金是可以当天买入当天卖出吗//@ETF拯救世界:回复@ETF拯救世界:喷了。跌停接回的朋友们，如果疯子们拉回-5%左右，可以再次卖掉，再吃5%。一天利润超过15%你什么感觉。T+0，当天买卖ok\n\n2020-01-09\n今天还是有点意思的\n\n2020-01-09\nDAX即将历史新高。\n\n2020-01-10\n50岁女友，4000万。羡慕。我也可以，不会赔钱！不想努力了，私信我。\n\n2020-01-13\n这年头资产不新高都不好意思上微博打招呼\n\n2020-01-13\n别挣太多钱。钱太多了就失去努力奋斗的朝气了。你想想，天天躺在加勒比海边躺椅上，喝着加冰的鸡尾酒，跟比基尼美女谈笑风生，特别无聊。真的。想想都可怕。\n\n2020-01-13\n当你抱怨网格出早了的时候，根本想不到的是，如果没有那点网格先锋队的牺牲，你的主力大部队根本拿不到现在的大胜。\n\n2020-01-13\n回复@傑杰2046:这种情况持续多久了，医生怎么说//@傑杰2046:我是怎样都难受，很难舒服\n\n2020-01-13\n今年微博礼物送完了，之后还有两次机会。估计那两次拿到要过年以后了。\n\n2020-01-14\n你以为是故事，其实是一段刻骨铭心的回忆。回忆这种事，怎么能随便拿出来给人看呢。我可是个很酷的人。\n\n2020-01-14\n一个人在家的日子，再次感受到了久违的单身狗の乐趣。\n\n2020-01-14\n回复@淮南华安:没有攒不了钱的。你任何收入拿到后20%放进投资账户就当丢了，绝对不取出来，你看能不能活下去，生活质量也几乎不会降低。然后你打开投资账户一看：我去，真丢了！//@淮南华安:我怎么赞不了了\n\n2020-01-14\n回复@雨天就要睡懒觉:油气在150里面有3份，占比1.1%。在S里面有3份，占比4%。好不容易有一个浮亏的品种就被说是托，我太南了。//@雨天就要睡懒觉:E大，有人在华宝油气下面说你是油气的托\n\n2020-01-14\n钱是好东西，多一点当然好。但别太抠门。要抠，你在自己身上抠，别对别人太抠。生不带来死不带去，把钱花在值得的人身上，不会错。如果你觉得自己值，就花在自己身上。哪个家人、亲戚、朋友值，就花在他们身上。就这么简单。当然，要保证花钱之前，所有收入20%-30%都攒起来投资……别自己没几个钱还穷大方就不好了……\n\n2020-01-15\n呵呵\n\n2020-01-15\n医药总是在别人不行的时候嘚瑟\n\n2020-01-15\n据说绝大多数人一辈子吃的东西是定量的，谁先吃完谁先走。\n\n2020-01-15\n回复@以后做快乐健康的小女人:饿一饿，激活免疫系统，淘汰受损细胞//@以后做快乐健康的小女人:回复@ETF拯救世界:ee，医生说身体里面只有宿便，没有什么毒素，放心哟\n\n2020-01-15\n回复@随记心路:现代人没几个饿病的，哪个不是吃太多吃出三高糖尿病。这些东西保留自己看法吧//@随记心路:个人反对这些理念。一日三餐，五谷杂粮，该吃就吃。肠胃又没得罪你，没事干嘛饿它。//@ETF拯救世界:回复@以后做快乐健康的小女人:饿一饿，激活免疫系统，淘汰受损细胞\n\n2020-01-15\n碰到什么与自己过去认识不同的东西，先别急着否认反对。如果感兴趣，先去了解，研究，看几篇论文，再判断。人这一生，每天都在接触新东西。你把自己的思维禁锢起来，就永远不会进步。开放，包容，择善固执。\n\n2020-01-15\n到底通过什么方式做公益比较靠谱呢。这些年我捐的那些不知道到底用上了多少。\n\n2020-01-15\n终于取消了。还是有点敏感度的。\n\n2020-01-15\n东亚几个国家关系搞好，对我们没有坏处。历史不能忘记，但不必每天宣传仇恨。\n\n2020-01-16\n阿根廷队梅西都要跟阿圭罗一个房间，中国队凭什么？省点钱抓青训不好吗？评论配图\n\n2020-01-16\n拍摄人的观察能力，推理能力，反应能力，语言能力都非常强\n\n2020-01-17\n回复@小智的马:只要前车不承认，而且没有摄像头拍到，就是后车全责。我遇到过，前车倒车把我撞了，不承认，一车人下来bb。警察来了，我把记录仪拿出来，都闭嘴了。//@小智的马:这个追尾要是没有行车记录仪和监控  要怎么算？  怕是要判特斯拉全责？\n\n2020-01-18\n很少看国产电视剧的我觉得网剧唐人街探案有点好看是怎么回事。\n\n2020-01-18\n停车等灯的时候被疲劳驾驶的司机追尾了。人没事，车也基本没事，一个倒车雷达被撞进去了。对方保险公司说如果要换保险杠得上万，年后去4s定损吧。各位出门都要小心啊。\n\n2020-01-18\n两个素质很重要第一是低调。第二是从别人的错误中得到经验。\n\n2020-01-18\n愤怒的根源来自于感受到不公平。\n\n2020-01-19\n从目前的信息分析，我个人觉得，最关键的是外界不知道每周一天闭馆到底是在干什么，博物馆也没有说清楚。我自己瞎想啊，那天一定有一部分展出文物和场馆的保养 维护工作。这个在大家预期内。现在看，也应该有一部分大家预期外的活动。比如vip参观，一些商业活动比如新品发布会，影视广告拍摄等等吧。这个过程中，一部分车辆被允许进入，通行。有两个问题导致事情这么大。第一个是之前调子定的太高，比如不能进车，外国政要要步行进入。结果发现不是这么回事。第二个是碰到了敏感的G。名车，草根一步登天后的炫耀，特Q等等。如果博物馆清楚明白说清楚闭馆日在做什么，如果之前调子不那么高，如果这位不那么嘚瑟…我最大的感受，是微博和网络在历史进程中，确实能起到不容小视的作用。\n\n2020-01-19\n看唐探，前8集邱泽主演，81年的，今年也39了。后四集跳着看了三分钟，看不下去。主演都是二十几岁的小鲜肉。男人的魅力和年龄关系不大。关键是不能胖，还有不能秃顶。\n\n2020-01-20\n伤医者无期以上，直系亲属拉入医疗系统黑名单。都是什么玩意儿！\n\n2020-01-20\n发现自己的家装维修战斗力只有5。一个洗手池下水管都装不好，弱鸡……\n\n2020-01-20\n回复@大漠孤烟0130:你说的是2019年吧。2019年，两市3553家公司，涨幅中位数15%。翻番股票206只，占比5.7%。24%股票是下跌的。你身边人都翻番了，只能说你们都是人中龙凤。再说，我这条微博说今天下跌公司，你说去年，有任何关系吗。\n\n2020-01-20\n今天咱们持仓指数都涨的很好对吧，其实还有1400只股票在下跌。炒股太南了。\n\n2020-01-20\n今年生肖鼠、马、羊、兔、鸡的朋友要更加小心，遇事心态平和，重大决定更加谨慎。各位都顺顺利利的。\n\n2020-01-20\n我实在搞不懂有些人的逻辑是什么：我：今天有1400只股票下跌。他：你不客观。去年我身边的人都翻番了。我：？？？\n\n2020-01-20\n虽然计划里面有不少医药仓位，但我当然希望流感尽快被消灭。大家都要做好防护措施，火车飞机一定全程口罩。\n\n2020-01-20\n不知道春节还能不能去看电影\n\n2020-01-20\n弄不好今天医药还得继续反弹新高。不过已经到了压力位，看看谁的力量大吧。\n\n2020-01-20\n万万没想到你是这样的小米……\n\n2020-01-20\n再坚持几天。\n\n2020-01-20\n$全指医药 sh000991$   爱了\n\n2020-01-20\n下次小米发布新品手机，买一个送给微博的朋友。\n\n2020-01-21\n一直get不到野味有什么好。难道猪牛羊鸡鸭鹅它不比竹鼠果子狸香吗。别瞎吃了！\n\n2020-01-21\n$全指医药 sh000991$  别这样，求救命……\n\n2020-01-21\n说明一下：我们的医药筹码是拿了至少一年以上了，并非要炒作概念才买。市场上有人愿意炒，我们可以把自己的筹码在适当时候让一些给他们，既然他们那么喜欢。\n\n2020-01-21\n搞清楚了，不是我战斗力渣，是缺少一个巨大的扳手拧螺母，还少了一点生料带。现在已经完全拥有下水管安装能力，有需要水管工的可以联系我了\n\n2020-01-21\n从那天到现在，已经50%+了。那天也是几乎最低点。投资就是这样，最黑暗之后就是黎明。目前医药仓位十几个点，可控。\n\n2020-01-22\n回复@开心快乐追求:你对大牛市一无所知//@开心快乐追求:感觉网格已经比计划收益高了，计划是假，网格是真\n\n2020-01-22\n今天德国DAX历史新高。很多朋友说我们买的德国30跟的不行。确实没有完全跟上，我考虑有几个原因第一，DAX是一个全收益指数，含股息，跟上它不容易。第二，汇率问题。第三，费率不低。看下图，跟的不好不仅是A股的德国30，美股上市的EWG更差。现在的问题是，市场上只有这一个跟踪欧洲的指数，不买它你也没的买。所以，希望以后有更丰富的品种吧。\n\n2020-01-22\n回复@cestmoi1018:什么，你说卖掉的同时又买别的也赚回来了？我不听我不听，只有消费的利润是利润，300和安心债也配说是利润吗。评论配图//@cestmoi1018:虽然把消费卖了，但是买了300和安心回报债啊，也都各涨了11%，又不是卖了就亏了或者少賺这13%\n\n2020-01-22\n回复@毛笔19487:不好意思，那一份确实半年赚了55%就走了。我本来也没说我能卖在最高点。让您失望了。取关我吧，省得天天看着我生气。您说好吗//@毛笔19487:涨了的就没完没了的装13 消费就买了一份然后早早卖了…到现在涨了多少只字不提//@ETF拯救世界:回复@开心快乐追求:你对大牛市一无所知\n\n2020-01-22\n什么玩意儿500还反弹新高了，找谁说理去\n\n2020-01-22\n其实吃到大网真的不容易，天时地利人和。需要这个品种开网价格不能太低，还需要跌的够多（下跌30%）。还要买完后反弹43%。最重要的，是跌30%的时候你不害怕继续果断按照计划买入这一个大网。\n\n2020-01-22\n这样会让人很尴尬你知道不知道。\n\n2020-01-22\nhow dare you!\n\n2020-01-22\n不懂就问，这种情况电影公司可以临时撤档吗。春节档先不上了，否则损失太大了。\n\n2020-01-22\n这样的话可以准备布置下网了。节后吧，最多5-6个相关性低的品种。不着急，符合条件就下。不怕你涨，不怕你波动，不怕你跌。只要开市，怎么都行。\n\n2020-01-22\n这一网没有出在最高，水平还是不行\n\n2020-01-22\n2019年1月，可以买入一份医药大网。这几天可以出掉。一年收益率43%。\n\n2020-01-23\n中老年男性重灾区。但是18岁的也不能嘚瑟。\n\n2020-01-23\n一天接回来一个小网。喷了\n\n2020-01-23\n节后大概率可以开始了\n\n2020-01-23\n一月份波动就这么大。你能想象今年全年吗。年底看看预判的对不对。\n\n2020-01-23\n回复@热火风雨无阻:去年阅读量没达到预期，今年没心气儿弄了。特累。//@热火风雨无阻:E大，今年有没有春节专辑啊，期待中！//@ETF拯救世界:节后大概率可以开始了\n\n2020-01-23\n又猜中了。--【6部贺岁档电影先后宣布退出春节档】电影《唐人街探案3》宣布撤出春节档，至此，6部贺岁档电影《熊出没·狂野大陆》、《姜子牙》、《紧急救援》、《囧妈》、《夺冠》、《唐人街探案3》退出春节档。\n\n2020-01-23\n关注我很久的一位朋友在这里工作，现在他们需要帮忙。他说现在顺丰还能送货，我会买一些发过去。能做的不多，希望一切尽快好起来。向所有医护人员说声谢谢。你们太值得尊敬了！\n\n2020-01-23\n放假了，也别每天在微博上泡着。微博上多了，焦虑情绪会变得严重。早晚看看新闻就行。假期好好在家呆着，陪陪家人，追追剧，玩玩游戏，放松一下。\n\n2020-01-24\n祝大家新春大吉，平安喜乐！\n\n2020-01-24\n京东\n\n2020-01-26\n不瞒你说，24小时没上网。第一时间上微博看看。今天都干嘛了，实话实说。我先说。玩了会健身环，看了会书，看了囧妈，弹会琴。明天要干点正事了。\n\n2020-01-27\n别管做不做，人家话说出来了，意愿表达了，咱得说声感谢。再看看咱们自己的台湾同胞\n\n2020-01-27\n回复@babalu51:图片评论评论配图//@babalu51:e大今天干了啥正经事//@ETF拯救世界:别管做不做，人家话说出来了，意愿表达了，咱得说声感谢。再看看咱们自己的台湾同胞\n\n2020-01-27\n你焦虑吗。一个月前就说了：今年大幅波动。不波动怎么赚钱…\n\n2020-01-27\n你们这些看外盘预测A股的，还是有点naive。还有几个交易日，弄不好外盘在A股开盘前已经暴跌暴涨回去了。我个人没什么期待，涨了挺好，跌了赚更多。多大点事啊也值得焦虑\n\n2020-01-27\n永远不知道明天和意外哪个先来。珍惜当下。\n\n2020-01-28\n另外，大家是不是没注意，计划（包括s），已经多长时间没买了。你以为攒钱干嘛呢。\n\n2020-01-28\n10:30  真的开始做正经事了。\n\n2020-01-28\n刚看了一下，经常看我东西的湖北朋友大概2500位左右。大家都辛苦了，会过去的。坚持一下。\n\n2020-01-28\n常读用户里面，有53%是26-35，27%是36-45。大部分都是有资产的哥哥姐姐。\n\n2020-01-28\n回复@ETF拯救世界:又买回来。评论配图//@ETF拯救世界:一个半月，又出一格。\n\n2020-01-28\n是这样的评论配图//@ETF拯救世界:回复@ETF拯救世界:又买回来。评论配图//@ETF拯救世界:一个半月，又出一格。\n\n2020-01-29\n回复@沐之以思:一部分人没有进化完全而已。身边这种没有进化完全的例子还少吗？哪年春天你逛公园看不见几个爬回树上照相的。//@沐之以思:吃野味到底为了啥，是为了那些虚无缥缈的“吃啥补啥”？\n\n2020-01-29\n回复@老实人的辛酸苦涩:装X就是进化不完全。进化完全的人谁会觉得吃点野味就是NB了。//@老实人的辛酸苦涩:回复@沐之以思:我觉得应该是装x的心理作祟\n\n2020-01-31\n转发微博\n\n"
    }
   ],
   "source": [
    "show_weibo_text(user_id,\"本月\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.4.上半年的发言"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": "2020-01-01\n新年快乐！！！\n\n2020-01-01\n新的一年，早上起来第一件事是锻炼身体这一年，要更加善待自己和他人，要更努力的做事。\n\n2020-01-01\n北京5G速度实测\n\n2020-01-02\n说一个几周前你会觉得很可笑的事：传媒ETF居然溢价了。市场的羊群疯起来真是不看路的。\n\n2020-01-02\n挣点钱而已，意思不大。\n\n2020-01-02\n今年是大波动这个判断是不是越来越靠谱了。如果全年大涨，就是又一个短命行情，明年又是万人坑。只有大幅波动才符合长牛慢牛的要求。\n\n2020-01-02\n今天押涨有风险吗\n\n2020-01-02\n听进去了没有。现在明白了吧。我说的一定要注意啊。\n\n2020-01-02\n3000点，账户历史新高了吧。\n\n2020-01-02\n春节前如果能维持涨势，春节后又要冲一把。\n\n2020-01-03\n喷了。好消息不断。\n\n2020-01-06\n黄金原油500传媒环保这些辣鸡这么涨让人感到有点不好意思了。\n\n2020-01-06\n500上面第一个压力5650\n\n2020-01-06\n意思不大\n\n2020-01-06\n投资的时候，舒服重要不重要。谁舒服谁发言。\n\n2020-01-06\n再次推荐电影《迷雾》The Mist没看过的一定要看看。看到最后。每次最绝望，最坚持不下去的时候，想想这部电影，会有用。\n\n2020-01-07\n早点睡，晚安\n\n2020-01-07\n以下几位拿礼物的朋友还没联系我或者小助理，请给我发私信。春节前再不联系就算自动放弃了。ETF张来迟、不忘初心方得始终201820232028、trq81526、丹石_bj\n\n2020-01-07\n出门在外，尽量别跟人起冲突。因为你根本想象不到对方有多二。\n\n2020-01-07\n传媒上面的压力位在1630。\n\n2020-01-07\n传媒辣鸡。你给我赚那么多也是辣鸡。\n\n2020-01-07\n你的东西涨了，你心里要清楚是因为价值还是炒作。自己心里得明明白白的。\n\n2020-01-07\n回复@兔望雨停:赔了踏踏实实拿10年，赚了烫手拿不了3天。非常经典，绝大多数人都这样。//@兔望雨停:我感觉账户的收益让我觉得好不踏实 只有每天上班的工资让我觉得踏实，明明这几天的收益抵我几个月工资。不知道是怎么回事\n\n2020-01-07\n回复@姨夫劝你莫拒绝:拿回现金也不是真的。没准下一把就赔了。销户离场之前都是假的。//@姨夫劝你莫拒绝:账面上的是虚的，收菜拿回现金的时候才是真的\n\n2020-01-07\n回复@frederick_999:永远不要劝别人炒股或者不炒股，买基金或者不买基金，投资或者不投资。一个建议，99%对。//@frederick_999:我几个券商的朋友已经开始拉着身边小伙伴入伙准备在股市大挣一笔了，我劝了一晚上没劝住。\n\n2020-01-07\n去年春节，吃饭的时候你跟亲戚说，钻石坑，买股票赚大钱。他们笑话你遇到了骗子。今年春节，吃饭的时候亲戚跟你说，黄金十年，买股票赚大钱。你笑着咬了口韭菜馅饺子。\n\n2020-01-07\n回复@1个吼猴:有些人炒股就是图个乐，跟打麻将似的。不炒股玩别的更闹心，孩子踏踏实实的。//@1个吼猴:回复@1个吼猴:但我爹不一样。我爹不相信市场，也不跟风追高，只相信自己天纵奇才。结果赔的比我妈还多\n\n2020-01-07\n又是一个好日子。今天资产能继续新高吗。\n\n2020-01-08\n回复@江尼的小酒馆:WTF，场内挂单要赶紧安排上了。送钱啊这是。//@江尼的小酒馆:E大今天德国30不知道出了什么幺蛾子，我的场内网格提醒买入，应该是突然暴跌，乌龙指？\n\n2020-01-08\n白银出掉一网，原油场内溢价卖出套利。现在金油大跌，这么给面子吗。\n\n2020-01-08\n虽然挣钱意思不大，但是跟赔钱时候一点意思都没有比起来，还是有意思多了啊。\n\n2020-01-08\n所以每次去拜大佬的时候，我第一个都是许愿国泰民安。这四个字没了，什么都是空。\n\n2020-01-08\n再走一个\n\n2020-01-08\n160416 计划里的石油基金，场内部分可以先卖出，大幅溢价。\n\n2020-01-08\n截至目前，150的31个品种中，盈利的是28个。如果把500算做一个大类，则浮亏品种只剩环保和油气。环保6%，油气2%。s计划18个品种中，盈利17个。只剩油气浮亏2%。如果做了网格，这两个也基本赚钱了。你的账户现在应该是满堂红。其实金融投资只要理性，赚钱真的不难。赔钱很难。无论A股港股海外互联黄金原油德国债券，都是如此。\n\n2020-01-09\n不用谢评论配图\n\n2020-01-09\n这个市场上充满了疯子和傻子。他们不会消失，所以理性的人赚钱就是必然//@ETF拯救世界:不用谢评论配图\n\n2020-01-09\n回复@ETF拯救世界:喷了。跌停接回的朋友们，如果疯子们拉回-5%左右，可以再次卖掉，再吃5%。一天利润超过15%你什么感觉。T+0，当天买卖ok//@ETF拯救世界:回复@ETF虚一而静:可以。也可以再等等，目前还有点溢价，不过无所谓了，十几个点差价已经吃到了\n\n2020-01-09\n回复@最爱芝麻糖:QDII基金绝大多数都可以。包括标普500，DAX，恒生等等。//@最爱芝麻糖:新手想问下  这个石油基金是可以当天买入当天卖出吗//@ETF拯救世界:回复@ETF拯救世界:喷了。跌停接回的朋友们，如果疯子们拉回-5%左右，可以再次卖掉，再吃5%。一天利润超过15%你什么感觉。T+0，当天买卖ok\n\n2020-01-09\n今天还是有点意思的\n\n2020-01-09\nDAX即将历史新高。\n\n2020-01-10\n50岁女友，4000万。羡慕。我也可以，不会赔钱！不想努力了，私信我。\n\n2020-01-13\n这年头资产不新高都不好意思上微博打招呼\n\n2020-01-13\n别挣太多钱。钱太多了就失去努力奋斗的朝气了。你想想，天天躺在加勒比海边躺椅上，喝着加冰的鸡尾酒，跟比基尼美女谈笑风生，特别无聊。真的。想想都可怕。\n\n2020-01-13\n当你抱怨网格出早了的时候，根本想不到的是，如果没有那点网格先锋队的牺牲，你的主力大部队根本拿不到现在的大胜。\n\n2020-01-13\n回复@傑杰2046:这种情况持续多久了，医生怎么说//@傑杰2046:我是怎样都难受，很难舒服\n\n2020-01-13\n今年微博礼物送完了，之后还有两次机会。估计那两次拿到要过年以后了。\n\n2020-01-14\n你以为是故事，其实是一段刻骨铭心的回忆。回忆这种事，怎么能随便拿出来给人看呢。我可是个很酷的人。\n\n2020-01-14\n一个人在家的日子，再次感受到了久违的单身狗の乐趣。\n\n2020-01-14\n回复@淮南华安:没有攒不了钱的。你任何收入拿到后20%放进投资账户就当丢了，绝对不取出来，你看能不能活下去，生活质量也几乎不会降低。然后你打开投资账户一看：我去，真丢了！//@淮南华安:我怎么赞不了了\n\n2020-01-14\n回复@雨天就要睡懒觉:油气在150里面有3份，占比1.1%。在S里面有3份，占比4%。好不容易有一个浮亏的品种就被说是托，我太南了。//@雨天就要睡懒觉:E大，有人在华宝油气下面说你是油气的托\n\n2020-01-14\n钱是好东西，多一点当然好。但别太抠门。要抠，你在自己身上抠，别对别人太抠。生不带来死不带去，把钱花在值得的人身上，不会错。如果你觉得自己值，就花在自己身上。哪个家人、亲戚、朋友值，就花在他们身上。就这么简单。当然，要保证花钱之前，所有收入20%-30%都攒起来投资……别自己没几个钱还穷大方就不好了……\n\n2020-01-15\n呵呵\n\n2020-01-15\n医药总是在别人不行的时候嘚瑟\n\n2020-01-15\n据说绝大多数人一辈子吃的东西是定量的，谁先吃完谁先走。\n\n2020-01-15\n回复@以后做快乐健康的小女人:饿一饿，激活免疫系统，淘汰受损细胞//@以后做快乐健康的小女人:回复@ETF拯救世界:ee，医生说身体里面只有宿便，没有什么毒素，放心哟\n\n2020-01-15\n回复@随记心路:现代人没几个饿病的，哪个不是吃太多吃出三高糖尿病。这些东西保留自己看法吧//@随记心路:个人反对这些理念。一日三餐，五谷杂粮，该吃就吃。肠胃又没得罪你，没事干嘛饿它。//@ETF拯救世界:回复@以后做快乐健康的小女人:饿一饿，激活免疫系统，淘汰受损细胞\n\n2020-01-15\n碰到什么与自己过去认识不同的东西，先别急着否认反对。如果感兴趣，先去了解，研究，看几篇论文，再判断。人这一生，每天都在接触新东西。你把自己的思维禁锢起来，就永远不会进步。开放，包容，择善固执。\n\n2020-01-15\n到底通过什么方式做公益比较靠谱呢。这些年我捐的那些不知道到底用上了多少。\n\n2020-01-15\n终于取消了。还是有点敏感度的。\n\n2020-01-15\n东亚几个国家关系搞好，对我们没有坏处。历史不能忘记，但不必每天宣传仇恨。\n\n2020-01-16\n阿根廷队梅西都要跟阿圭罗一个房间，中国队凭什么？省点钱抓青训不好吗？评论配图\n\n2020-01-16\n拍摄人的观察能力，推理能力，反应能力，语言能力都非常强\n\n2020-01-17\n回复@小智的马:只要前车不承认，而且没有摄像头拍到，就是后车全责。我遇到过，前车倒车把我撞了，不承认，一车人下来bb。警察来了，我把记录仪拿出来，都闭嘴了。//@小智的马:这个追尾要是没有行车记录仪和监控  要怎么算？  怕是要判特斯拉全责？\n\n2020-01-18\n很少看国产电视剧的我觉得网剧唐人街探案有点好看是怎么回事。\n\n2020-01-18\n停车等灯的时候被疲劳驾驶的司机追尾了。人没事，车也基本没事，一个倒车雷达被撞进去了。对方保险公司说如果要换保险杠得上万，年后去4s定损吧。各位出门都要小心啊。\n\n2020-01-18\n两个素质很重要第一是低调。第二是从别人的错误中得到经验。\n\n2020-01-18\n愤怒的根源来自于感受到不公平。\n\n2020-01-19\n从目前的信息分析，我个人觉得，最关键的是外界不知道每周一天闭馆到底是在干什么，博物馆也没有说清楚。我自己瞎想啊，那天一定有一部分展出文物和场馆的保养 维护工作。这个在大家预期内。现在看，也应该有一部分大家预期外的活动。比如vip参观，一些商业活动比如新品发布会，影视广告拍摄等等吧。这个过程中，一部分车辆被允许进入，通行。有两个问题导致事情这么大。第一个是之前调子定的太高，比如不能进车，外国政要要步行进入。结果发现不是这么回事。第二个是碰到了敏感的G。名车，草根一步登天后的炫耀，特Q等等。如果博物馆清楚明白说清楚闭馆日在做什么，如果之前调子不那么高，如果这位不那么嘚瑟…我最大的感受，是微博和网络在历史进程中，确实能起到不容小视的作用。\n\n2020-01-19\n看唐探，前8集邱泽主演，81年的，今年也39了。后四集跳着看了三分钟，看不下去。主演都是二十几岁的小鲜肉。男人的魅力和年龄关系不大。关键是不能胖，还有不能秃顶。\n\n2020-01-20\n伤医者无期以上，直系亲属拉入医疗系统黑名单。都是什么玩意儿！\n\n2020-01-20\n发现自己的家装维修战斗力只有5。一个洗手池下水管都装不好，弱鸡……\n\n2020-01-20\n回复@大漠孤烟0130:你说的是2019年吧。2019年，两市3553家公司，涨幅中位数15%。翻番股票206只，占比5.7%。24%股票是下跌的。你身边人都翻番了，只能说你们都是人中龙凤。再说，我这条微博说今天下跌公司，你说去年，有任何关系吗。\n\n2020-01-20\n今天咱们持仓指数都涨的很好对吧，其实还有1400只股票在下跌。炒股太南了。\n\n2020-01-20\n今年生肖鼠、马、羊、兔、鸡的朋友要更加小心，遇事心态平和，重大决定更加谨慎。各位都顺顺利利的。\n\n2020-01-20\n我实在搞不懂有些人的逻辑是什么：我：今天有1400只股票下跌。他：你不客观。去年我身边的人都翻番了。我：？？？\n\n2020-01-20\n虽然计划里面有不少医药仓位，但我当然希望流感尽快被消灭。大家都要做好防护措施，火车飞机一定全程口罩。\n\n2020-01-20\n不知道春节还能不能去看电影\n\n2020-01-20\n弄不好今天医药还得继续反弹新高。不过已经到了压力位，看看谁的力量大吧。\n\n2020-01-20\n万万没想到你是这样的小米……\n\n2020-01-20\n再坚持几天。\n\n2020-01-20\n$全指医药 sh000991$   爱了\n\n2020-01-20\n下次小米发布新品手机，买一个送给微博的朋友。\n\n2020-01-21\n一直get不到野味有什么好。难道猪牛羊鸡鸭鹅它不比竹鼠果子狸香吗。别瞎吃了！\n\n2020-01-21\n$全指医药 sh000991$  别这样，求救命……\n\n2020-01-21\n说明一下：我们的医药筹码是拿了至少一年以上了，并非要炒作概念才买。市场上有人愿意炒，我们可以把自己的筹码在适当时候让一些给他们，既然他们那么喜欢。\n\n2020-01-21\n搞清楚了，不是我战斗力渣，是缺少一个巨大的扳手拧螺母，还少了一点生料带。现在已经完全拥有下水管安装能力，有需要水管工的可以联系我了\n\n2020-01-21\n从那天到现在，已经50%+了。那天也是几乎最低点。投资就是这样，最黑暗之后就是黎明。目前医药仓位十几个点，可控。\n\n2020-01-22\n回复@开心快乐追求:你对大牛市一无所知//@开心快乐追求:感觉网格已经比计划收益高了，计划是假，网格是真\n\n2020-01-22\n今天德国DAX历史新高。很多朋友说我们买的德国30跟的不行。确实没有完全跟上，我考虑有几个原因第一，DAX是一个全收益指数，含股息，跟上它不容易。第二，汇率问题。第三，费率不低。看下图，跟的不好不仅是A股的德国30，美股上市的EWG更差。现在的问题是，市场上只有这一个跟踪欧洲的指数，不买它你也没的买。所以，希望以后有更丰富的品种吧。\n\n2020-01-22\n回复@cestmoi1018:什么，你说卖掉的同时又买别的也赚回来了？我不听我不听，只有消费的利润是利润，300和安心债也配说是利润吗。评论配图//@cestmoi1018:虽然把消费卖了，但是买了300和安心回报债啊，也都各涨了11%，又不是卖了就亏了或者少賺这13%\n\n2020-01-22\n回复@毛笔19487:不好意思，那一份确实半年赚了55%就走了。我本来也没说我能卖在最高点。让您失望了。取关我吧，省得天天看着我生气。您说好吗//@毛笔19487:涨了的就没完没了的装13 消费就买了一份然后早早卖了…到现在涨了多少只字不提//@ETF拯救世界:回复@开心快乐追求:你对大牛市一无所知\n\n2020-01-22\n什么玩意儿500还反弹新高了，找谁说理去\n\n2020-01-22\n其实吃到大网真的不容易，天时地利人和。需要这个品种开网价格不能太低，还需要跌的够多（下跌30%）。还要买完后反弹43%。最重要的，是跌30%的时候你不害怕继续果断按照计划买入这一个大网。\n\n2020-01-22\n这样会让人很尴尬你知道不知道。\n\n2020-01-22\nhow dare you!\n\n2020-01-22\n不懂就问，这种情况电影公司可以临时撤档吗。春节档先不上了，否则损失太大了。\n\n2020-01-22\n这样的话可以准备布置下网了。节后吧，最多5-6个相关性低的品种。不着急，符合条件就下。不怕你涨，不怕你波动，不怕你跌。只要开市，怎么都行。\n\n2020-01-22\n这一网没有出在最高，水平还是不行\n\n2020-01-22\n2019年1月，可以买入一份医药大网。这几天可以出掉。一年收益率43%。\n\n2020-01-23\n中老年男性重灾区。但是18岁的也不能嘚瑟。\n\n2020-01-23\n一天接回来一个小网。喷了\n\n2020-01-23\n节后大概率可以开始了\n\n2020-01-23\n一月份波动就这么大。你能想象今年全年吗。年底看看预判的对不对。\n\n2020-01-23\n回复@热火风雨无阻:去年阅读量没达到预期，今年没心气儿弄了。特累。//@热火风雨无阻:E大，今年有没有春节专辑啊，期待中！//@ETF拯救世界:节后大概率可以开始了\n\n2020-01-23\n又猜中了。--【6部贺岁档电影先后宣布退出春节档】电影《唐人街探案3》宣布撤出春节档，至此，6部贺岁档电影《熊出没·狂野大陆》、《姜子牙》、《紧急救援》、《囧妈》、《夺冠》、《唐人街探案3》退出春节档。\n\n2020-01-23\n关注我很久的一位朋友在这里工作，现在他们需要帮忙。他说现在顺丰还能送货，我会买一些发过去。能做的不多，希望一切尽快好起来。向所有医护人员说声谢谢。你们太值得尊敬了！\n\n2020-01-23\n放假了，也别每天在微博上泡着。微博上多了，焦虑情绪会变得严重。早晚看看新闻就行。假期好好在家呆着，陪陪家人，追追剧，玩玩游戏，放松一下。\n\n2020-01-24\n祝大家新春大吉，平安喜乐！\n\n2020-01-24\n京东\n\n2020-01-26\n不瞒你说，24小时没上网。第一时间上微博看看。今天都干嘛了，实话实说。我先说。玩了会健身环，看了会书，看了囧妈，弹会琴。明天要干点正事了。\n\n2020-01-27\n别管做不做，人家话说出来了，意愿表达了，咱得说声感谢。再看看咱们自己的台湾同胞\n\n2020-01-27\n回复@babalu51:图片评论评论配图//@babalu51:e大今天干了啥正经事//@ETF拯救世界:别管做不做，人家话说出来了，意愿表达了，咱得说声感谢。再看看咱们自己的台湾同胞\n\n2020-01-27\n你焦虑吗。一个月前就说了：今年大幅波动。不波动怎么赚钱…\n\n2020-01-27\n你们这些看外盘预测A股的，还是有点naive。还有几个交易日，弄不好外盘在A股开盘前已经暴跌暴涨回去了。我个人没什么期待，涨了挺好，跌了赚更多。多大点事啊也值得焦虑\n\n2020-01-27\n永远不知道明天和意外哪个先来。珍惜当下。\n\n2020-01-28\n另外，大家是不是没注意，计划（包括s），已经多长时间没买了。你以为攒钱干嘛呢。\n\n2020-01-28\n10:30  真的开始做正经事了。\n\n2020-01-28\n刚看了一下，经常看我东西的湖北朋友大概2500位左右。大家都辛苦了，会过去的。坚持一下。\n\n2020-01-28\n常读用户里面，有53%是26-35，27%是36-45。大部分都是有资产的哥哥姐姐。\n\n2020-01-28\n回复@ETF拯救世界:又买回来。评论配图//@ETF拯救世界:一个半月，又出一格。\n\n2020-01-28\n是这样的评论配图//@ETF拯救世界:回复@ETF拯救世界:又买回来。评论配图//@ETF拯救世界:一个半月，又出一格。\n\n2020-01-29\n回复@沐之以思:一部分人没有进化完全而已。身边这种没有进化完全的例子还少吗？哪年春天你逛公园看不见几个爬回树上照相的。//@沐之以思:吃野味到底为了啥，是为了那些虚无缥缈的“吃啥补啥”？\n\n2020-01-29\n回复@老实人的辛酸苦涩:装X就是进化不完全。进化完全的人谁会觉得吃点野味就是NB了。//@老实人的辛酸苦涩:回复@沐之以思:我觉得应该是装x的心理作祟\n\n2020-01-31\n转发微博\n\n"
    }
   ],
   "source": [
    "show_weibo_text(user_id,\"上半年\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.5.下半年的发言"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {},
   "outputs": [],
   "source": [
    "show_weibo_text(user_id,\"下半年\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.查看原始数据\n",
    "- 查看DataFrame原始数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>发布时间</th>\n      <th>内容</th>\n      <th>点赞</th>\n      <th>评论</th>\n      <th>转发</th>\n      <th>地址</th>\n      <th>sended</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>2020-01-31 04:04:23</td>\n      <td>转发微博</td>\n      <td>680.0</td>\n      <td>239.0</td>\n      <td>41.0</td>\n      <td>https://m.weibo.cn/status/IrXKfxnVe?mblogid=Ir...</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2020-01-29 18:56:47</td>\n      <td>回复&lt;a href='/n/老实人的辛酸苦涩'&gt;@老实人的辛酸苦涩&lt;/a&gt;:装X就是进化不完...</td>\n      <td>495.0</td>\n      <td>88.0</td>\n      <td>12.0</td>\n      <td>https://m.weibo.cn/status/IrKJtxHum?mblogid=Ir...</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2020-01-29 18:50:16</td>\n      <td>回复&lt;a href='/n/沐之以思'&gt;@沐之以思&lt;/a&gt;:一部分人没有进化完全而已。身边这...</td>\n      <td>435.0</td>\n      <td>51.0</td>\n      <td>13.0</td>\n      <td>https://m.weibo.cn/status/IrKGQbujd?mblogid=Ir...</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>2020-01-28 23:35:41</td>\n      <td>是这样的 &lt;a data-url=\"http://t.cn/A6PJiR6H\" href=\"...</td>\n      <td>458.0</td>\n      <td>190.0</td>\n      <td>16.0</td>\n      <td>https://m.weibo.cn/status/IrD8c87Wr?mblogid=Ir...</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>2020-01-28 23:29:14</td>\n      <td>回复&lt;a href='/n/ETF拯救世界'&gt;@ETF拯救世界&lt;/a&gt;:又买回来。 &lt;a d...</td>\n      <td>363.0</td>\n      <td>85.0</td>\n      <td>26.0</td>\n      <td>https://m.weibo.cn/status/IrD5zBWtx?mblogid=Ir...</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>10427</th>\n      <td>2015-09-29 13:01:25</td>\n      <td>我去，居然有大户打赏了！早知道早就来微博了！这么多年少说少赚了100块……我会更加努力的。么...</td>\n      <td>25.0</td>\n      <td>33.0</td>\n      <td>3.0</td>\n      <td>https://m.weibo.cn/status/CCLD828EG?mblogid=CC...</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>10428</th>\n      <td>2015-09-29 11:31:02</td>\n      <td>大概从10年前起，就开始有意识的收集市场极端情况下的新闻报道。真的特别有意思。最近几年，用的...</td>\n      <td>24.0</td>\n      <td>14.0</td>\n      <td>20.0</td>\n      <td>https://m.weibo.cn/status/CCL2r1DKs?mblogid=CC...</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>10429</th>\n      <td>2015-09-29 10:26:05</td>\n      <td>持股的人不要总是嘲笑谩骂持币的投资者。这样一个恒时高估的赌场，大部分时间持币有何过错？在估值...</td>\n      <td>16.0</td>\n      <td>14.0</td>\n      <td>4.0</td>\n      <td>https://m.weibo.cn/status/CCKC4EnwI?mblogid=CC...</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>10430</th>\n      <td>2015-09-29 06:30:45</td>\n      <td>今天的第一个问题是，美帝如此脆弱，我们的73倍pe神创会继续NB吗。第二个问题是，还有两个交...</td>\n      <td>20.0</td>\n      <td>27.0</td>\n      <td>3.0</td>\n      <td>https://m.weibo.cn/status/CCJ4y5pAY?mblogid=CC...</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>10431</th>\n      <td>2015-09-28 17:21:25</td>\n      <td>新开微博，万象更新。也没什么送给大家的，送大家几张今天的估值图吧 ​</td>\n      <td>86.0</td>\n      <td>76.0</td>\n      <td>16.0</td>\n      <td>https://m.weibo.cn/status/CCDU9CU5r?mblogid=CC...</td>\n      <td>True</td>\n    </tr>\n  </tbody>\n</table>\n<p>10432 rows × 7 columns</p>\n</div>",
      "text/plain": "                      发布时间                                                 内容  \\\n0      2020-01-31 04:04:23                                               转发微博   \n1      2020-01-29 18:56:47  回复<a href='/n/老实人的辛酸苦涩'>@老实人的辛酸苦涩</a>:装X就是进化不完...   \n2      2020-01-29 18:50:16  回复<a href='/n/沐之以思'>@沐之以思</a>:一部分人没有进化完全而已。身边这...   \n3      2020-01-28 23:35:41  是这样的 <a data-url=\"http://t.cn/A6PJiR6H\" href=\"...   \n4      2020-01-28 23:29:14  回复<a href='/n/ETF拯救世界'>@ETF拯救世界</a>:又买回来。 <a d...   \n...                    ...                                                ...   \n10427  2015-09-29 13:01:25  我去，居然有大户打赏了！早知道早就来微博了！这么多年少说少赚了100块……我会更加努力的。么...   \n10428  2015-09-29 11:31:02  大概从10年前起，就开始有意识的收集市场极端情况下的新闻报道。真的特别有意思。最近几年，用的...   \n10429  2015-09-29 10:26:05  持股的人不要总是嘲笑谩骂持币的投资者。这样一个恒时高估的赌场，大部分时间持币有何过错？在估值...   \n10430  2015-09-29 06:30:45  今天的第一个问题是，美帝如此脆弱，我们的73倍pe神创会继续NB吗。第二个问题是，还有两个交...   \n10431  2015-09-28 17:21:25                 新开微博，万象更新。也没什么送给大家的，送大家几张今天的估值图吧 ​   \n\n          点赞     评论    转发                                                 地址  \\\n0      680.0  239.0  41.0  https://m.weibo.cn/status/IrXKfxnVe?mblogid=Ir...   \n1      495.0   88.0  12.0  https://m.weibo.cn/status/IrKJtxHum?mblogid=Ir...   \n2      435.0   51.0  13.0  https://m.weibo.cn/status/IrKGQbujd?mblogid=Ir...   \n3      458.0  190.0  16.0  https://m.weibo.cn/status/IrD8c87Wr?mblogid=Ir...   \n4      363.0   85.0  26.0  https://m.weibo.cn/status/IrD5zBWtx?mblogid=Ir...   \n...      ...    ...   ...                                                ...   \n10427   25.0   33.0   3.0  https://m.weibo.cn/status/CCLD828EG?mblogid=CC...   \n10428   24.0   14.0  20.0  https://m.weibo.cn/status/CCL2r1DKs?mblogid=CC...   \n10429   16.0   14.0   4.0  https://m.weibo.cn/status/CCKC4EnwI?mblogid=CC...   \n10430   20.0   27.0   3.0  https://m.weibo.cn/status/CCJ4y5pAY?mblogid=CC...   \n10431   86.0   76.0  16.0  https://m.weibo.cn/status/CCDU9CU5r?mblogid=CC...   \n\n       sended  \n0       False  \n1       False  \n2       False  \n3       False  \n4       False  \n...       ...  \n10427    True  \n10428    True  \n10429    True  \n10430    True  \n10431    True  \n\n[10432 rows x 7 columns]"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看原始数据    \n",
    "def show_weibo_data(user_id,data_root='./'):\n",
    "    #从cvs文件恢复数据\n",
    "    df=read_weibo_data(user_id)\n",
    "    df=df.rename(columns={'created_at':'发布时间','text':'内容',\n",
    "                            'attitudes_count':'点赞','comments_count':'评论','reposts_count':'转发',\n",
    "                            'scheme':'地址'})\n",
    "    return df\n",
    "\n",
    "df=show_weibo_data(user_id)\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5.整理数据\n",
    "- 获取微博完整信息：完整日期、完整内容。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {},
   "outputs": [],
   "source": [
    "#整理数据 \n",
    "def dig_weibo_data(user_id,data_root='./'):\n",
    "    df=read_weibo_data(user_id)\n",
    "    #计数器\n",
    "    count=0   \n",
    "    #遍历所有数据\n",
    "    for i in range(len(df)): \n",
    "        #开启错误抓取\n",
    "        try:\n",
    "            if len(df['created_at'].iloc[i])<=10:\n",
    "                #计数器累加\n",
    "                count+=1\n",
    "                print(' 正在整理：%s 的微博...'%(df['created_at'].iloc[i]),end='\\r')\n",
    "                text,day=get_weibo_text(df['scheme'].iloc[i])\n",
    "                df['created_at'].iloc[i]=day\n",
    "                df['text'].iloc[i]=text\n",
    "        #错误处理\n",
    "        except Exception as e:\n",
    "            print(' 错误：%s'%(df['scheme'].iloc[i]),end='\\r')\n",
    "            pass\n",
    "    #保存数据到cvs \n",
    "    save_weibo_data(user_id,df)\n",
    "    return df\n",
    "\n",
    "df=dig_weibo_data(id)\n",
    "df=df[df['created_at'].astype('str').str.len()<=10]   \n",
    "df\n",
    "print(len(df))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6.生成文本文件\n",
    "- 生成文本文件，可作为下载后阅读使用；\n",
    "- 已去除了内容中的多余链接等无关信息。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {},
   "outputs": [],
   "source": [
    "#生成txt文件      \n",
    "def write_weibo_text(user_id,data_root='./'):\n",
    "    #从cvs文件恢复数据\n",
    "    df=read_weibo_data(user_id)\n",
    "#     if exists_weibo_file(user_id):  \n",
    "#         os.remove(file_path)\n",
    "    for i in range(len(df)): \n",
    "        print('-正在整理，第%s条微博...'%(i),end='\\r')\n",
    "        \n",
    "        text=df['text'].iloc[i]\n",
    "        soup=BeautifulSoup(text,'html.parser')\n",
    "        text=''.join([item for item in soup.stripped_strings])\n",
    "               \n",
    "        with open(file_path,'a',encoding='utf-8') as fh:                      \n",
    "            fh.write(\n",
    "                 \"发布时间：\"+str(df['created_at'].iloc[i])+\"\\n\"\n",
    "                 +\"微博内容：\"+text+\"\\n\"\n",
    "                 +\"微博地址：\"+str(df['scheme'].iloc[i])+\"\\n\"\n",
    "                 +\"\\n\"   \n",
    "                )\n",
    "\n",
    "write_weibo_text(user_id,)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7.发送邮件\n",
    "- 发送某个月的所有发言到邮箱；"
   ]
  },
  {
   "source": [
    "import sys\n",
    "\n",
    "#引入自定义库\n",
    "sys.path.append(\"../TL\")\n",
    "from tl_mail import *\n",
    "\n",
    "#发送某月数据\n",
    "def send_weibo_data(user_id,user_name):\n",
    "    #检查是否已存在数据\n",
    "    if not exists_weibo_file(user_id):\n",
    "        print('未找到 %s 的微博发言数据表！'%user_id)\n",
    "        return\n",
    "    #读取数据\n",
    "    df=read_weibo_data(user_id)\n",
    "    #计算起止年\n",
    "    start_year=int(df.created_at.iloc[-1][:4])\n",
    "    end_year=int(df.created_at.iloc[0][:4])+1\n",
    "    #月\n",
    "    m_list=['01','02','03','04','05','06','07','08','09','10','11','12'] \n",
    "    #当前月份\n",
    "    current_month=pd.datetime.today().strftime('%Y-%m')\n",
    "    #已发送标记\n",
    "    issend=False\n",
    "    #遍历年、月\n",
    "    for y in range(start_year,end_year):\n",
    "        for m in m_list:\n",
    "            month=str(y)+'-'+m\n",
    "            #判断是否为当月，当月不发送\n",
    "            if current_month==month:\n",
    "                continue\n",
    "            #按照年月筛选    \n",
    "            temp_df=df[(df.created_at.str[0:7]==month) & (df.sended==False)]\n",
    "            temp_df=temp_df.sort_values('created_at')\n",
    "            if len(temp_df)==0:\n",
    "                continue  \n",
    "            #生成月邮件正文    \n",
    "            message=''\n",
    "            for i in range(len(temp_df)):\n",
    "                #日期\n",
    "                message+='<p>%s</p>'%temp_df.created_at.iloc[i]  \n",
    "                #url\n",
    "                message+='<p>%s</p>'%temp_df.scheme.iloc[i] \n",
    "                #正文    \n",
    "                message+='%s</br></br><hr /></br>'%temp_df.text.iloc[i] \n",
    "            #邮件主题    \n",
    "            subjiect='%s年%s月（微博发言 %s）'%(y,m,user_name)\n",
    "            #内容标题\n",
    "            title='<h2>%s</h2></br><hr />'%(subjiect)\n",
    "            #邮件内容\n",
    "            message=title+message\n",
    "            #去除多余的行\n",
    "            #message=message.replace('<br/><br/>','').replace('</p></br>','</p>').replace('<p><br/></p>','')\n",
    "            try:\n",
    "                \n",
    "                #发送邮件\n",
    "                send_html_qqmail(subjiect,message)\n",
    "                #标记已发送\n",
    "                if len(temp_df)==1:\n",
    "                    df.sended.iloc[temp_df.index[0]]=True\n",
    "                else:\n",
    "                    df.sended.iloc[temp_df.index[-1]:temp_df.index[0]+1]=True\n",
    "                issend=True    \n",
    "                print(' %s 的发言发送成功！'%(subjiect),end='\\r')\n",
    "                #延时5秒，防止被踢\n",
    "                time.sleep(3)\n",
    "            except Exception as e:\n",
    "                print(e)\n",
    "                print(' %s 的发言发送失败！'%(subjiect),end='\\r')\n",
    "    #如果有发送，则保存            \n",
    "    if issend:\n",
    "        save_weibo_data(user_id,df)\n",
    "\n",
    "        \n",
    "send_weibo_data(user_id,user_name)  "
   ],
   "cell_type": "code",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "(550, b'Connection frequency limited. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000722 [MD5Wr9Ud9UI8A8CI26leRPiaAm6B2NVXYQEBpP3/GhxiSbUoGyeytUSgys2sMMpsDg== IP: 212.64.102.119]')\n 2019年07月（微博发言 ETF拯救世界） 的发言发送失败！(550, b'Connection frequency limited. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000722 [MD5Wr9Ud9UI8A8CI26leRPhOLaFuBBx5hdoTmE7OW3WMAzN+pbuG6pdMhXxjjfmeEg== IP: 212.64.102.119]')\n 2019年08月（微博发言 ETF拯救世界） 的发言发送失败！(550, b'Connection frequency limited. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000722 [MD5Wr9Ud9UI8A8CI26leRPi69N8pqaGvdsgp3SmMm4tdk6h7bombjDNTLF0Iy0nY3Q== IP: 212.64.102.119]')\n(550, b'Connection frequency limited. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000722 [MD5Wr9Ud9UI8A8CI26leRPiSzMP4hpYu2rDKz/SbwmahnbgMhO860Gsn1bBN3IM4XA== IP: 212.64.102.119]')\n 2019年10月（微博发言 ETF拯救世界） 的发言发送失败！(550, b'Connection frequency limited. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000722 [MD5Wr9Ud9UI8A8CI26leRPg6JQjC3ya71QIOUiW38dxb8jBq5k1ua9w7Yit41KsjHA== IP: 212.64.102.119]')\n 2019年11月（微博发言 ETF拯救世界） 的发言发送失败！(550, b'Connection frequency limited. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000722 [MD5Wr9Ud9UI8A8CI26leRPgsZ4LTjAwM0nHGZC2NLbQ5uW5So7poDYDEvH0mbA1oSg== IP: 212.64.102.119]')\n 2019年12月（微博发言 ETF拯救世界） 的发言发送失败！"
    }
   ],
   "metadata": {},
   "execution_count": 14
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.set_option('display.max_rows',2000)\n",
    "df=read_weibo_data(user_id)\n",
    "# del df[df.index==702] \n",
    "#del df[(df['created_at']==False)] \n",
    "#df.drop(axis=0,labels=['False'],inplace=True) \n",
    "#df[(df['created_at']>='2018-09-01') & (df['created_at']<='2018-09-30')] \n",
    "#df[(df['created_at']>='2018-09-01') & (df['created_at']<='2018-09-30')].sended=False\n",
    "#save_weibo_data(user_id,df)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4-final"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}